-
create-entryCreate Knowledge Base Entry -
get-entryGet Knowledge Base Entry -
list-entriesList Knowledge Base Entries -
trash-entryTrash Knowledge Base Entry -
update-entryUpdate Knowledge Base Entry
Create Knowledge Base Entry
Creates a new knowledge base entry and publishes it immediately. Entries map to OKF concept documents. To create a folder (a grouping entry with no content of its own), omit content_md or pass an empty string — the /index.md URL for that entry will become live automatically once you add children under it via parent_id. Do NOT create a child entry named “index” — folder indexes are generated automatically. Returns has_content and has_children to indicate which markdown URLs are currently live. The content_md field name matches the field name returned by get-entry’s output, so you can round-trip content between the two abilities without renaming. Requires edit_posts. Pass site_id to act on another site you belong to.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
title |
string | Yes | Entry title. | |
content_md |
string | No | Entry content as Markdown. Standard Markdown is supported: headings, paragraphs, lists, blockquotes, fenced code blocks, inline code, bold, italic, links, images. Omit or pass empty string to create a container/folder entry with no concept document of its own. This field name matches the content_md field returned by get-entry. |
|
type |
array of string | No |
lh_knowledge_base_concept_type term slugs. The first term becomes the OKF “type” frontmatter field. Terms are created if they do not exist. |
|
parent_id |
integer | No | Parent entry ID. Pass 0 or omit for a top-level entry. Setting a parent places this entry inside the parent’s folder — the parent’s /index.md will include a link to this entry. | |
task_id |
integer | No | Optional. The lh-tasks task this call is working on. Pass with claim_token: the call is refused unless you hold that claim, and a successful call renews it. |
|
claim_token |
string | No | Optional. The claim_token from claim-next-task for task_id. Required when task_id is given. |
|
site_id |
integer | No | Optional. ID of another site in the network to act on; list-my-sites gives the sites you belong to. Permissions are checked on that site. Omit for this site. |
Get Knowledge Base Entry
Retrieves a single knowledge base entry by ID, slug, or hierarchical path. Use path (e.g. “season/round-1”) when navigating via .md URLs and you know the path but not the ID — this is the natural bridge between reading via .md URLs and writing via MCP. Returns title, content as markdown, raw block content, type terms, parent, revision count, and URLs. The returned “content_md” field name matches the input field name accepted by create-entry and update-entry, so content can be round-tripped without renaming. Requires read, plus edit_post on the entry for one that is not active (a draft, pending, private or trashed entry). Pass site_id to act on another site you belong to.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
id |
integer | No | Post ID. One of id, slug, or path is required. | |
slug |
string | No | Post slug. One of id, slug, or path is required. | |
path |
string | No | Hierarchical path as it appears in the .md URL, e.g. “season/round-1”. One of id, slug, or path is required. Use this when navigating via .md URLs and you know the path but not the ID. | |
site_id |
integer | No | Optional. ID of another site in the network to act on; list-my-sites gives the sites you belong to. Permissions are checked on that site. Omit for this site. |
List Knowledge Base Entries
Returns a paginated list of knowledge base entries. Each item includes has_content and has_children flags indicating which OKF markdown URLs are live. Use parent_id=0 to list only top-level entries (the root of the knowledge hierarchy). Omit parent_id to list all entries regardless of depth. Only active entries are listed. Requires read. Pass site_id to act on another site you belong to.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
type |
string | No | Filter by lh_knowledge_base_concept_type term slug. |
|
parent_id |
integer | No | Filter by parent post ID. Pass 0 to list only top-level entries. Omit to return all entries regardless of hierarchy depth. | |
search |
string | No | Keyword search against entry title and content. | |
per_page |
integer | No | 20 |
Results per page. Default 20, max 100. |
page |
integer | No | 1 |
Page number (1-based). Default 1. |
depth |
integer | No | Maximum hierarchy depth to return relative to parent_id (or top-level if parent_id omitted). 1 = direct children only. 2 = children and grandchildren. Omit for no depth limit. Each item includes a depth field (0 = top-level). |
|
modified_after |
string | No | Return only entries modified after this date. ISO 8601 format (e.g. 2026-01-01T00:00:00Z). | |
modified_before |
string | No | Return only entries modified before this date. ISO 8601 format (e.g. 2026-06-30T23:59:59Z). | |
site_id |
integer | No | Optional. ID of another site in the network to act on; list-my-sites gives the sites you belong to. Permissions are checked on that site. Omit for this site. |
Trash Knowledge Base Entry
Moves a knowledge base entry to trash. The entry is recoverable via the WordPress admin. Permanent deletion is not available via MCP — this is intentional to protect against accidental data loss. Trashing a parent entry does not automatically trash its children; children will become orphaned (top-level) entries. A locked entry (LH Post Locking) is refused with a clear error. Requires edit_posts, plus delete_post on the entry. Pass site_id to act on another site you belong to.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
id |
integer | Yes | Post ID of the entry to trash. | |
task_id |
integer | No | Optional. The lh-tasks task this call is working on. Pass with claim_token: the call is refused unless you hold that claim, and a successful call renews it. |
|
claim_token |
string | No | Optional. The claim_token from claim-next-task for task_id. Required when task_id is given. |
|
site_id |
integer | No | Optional. ID of another site in the network to act on; list-my-sites gives the sites you belong to. Permissions are checked on that site. Omit for this site. |
Update Knowledge Base Entry
Patch-updates an existing knowledge base entry. Only supplied fields are changed — omitted fields are left untouched. Pass an empty array to type to clear all type terms. Setting content_md to an empty string converts a concept entry into a container/folder entry (its /{slug}.md URL will return 404; its /{slug}/index.md will still be live if it has children). The content_md field name matches the field name returned by get-entry’s output. At least one of title, content_md, type, or parent_id must be supplied — an unrecognised parameter is rejected outright rather than silently ignored. A locked entry (LH Post Locking) is refused with a clear error. Requires edit_posts, plus edit_post on the entry. Pass site_id to act on another site you belong to.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
id |
integer | Yes | Post ID of the entry to update. | |
title |
string | No | New title. Omit to leave unchanged. | |
content_md |
string | No | New content as Markdown. Omit to leave unchanged. Pass empty string to remove content and convert to a container/folder entry. This field name matches the content_md field returned by get-entry. |
|
type |
array of string | No | Replacement type term slugs. Replaces all existing type terms. Pass empty array to clear. Omit to leave unchanged. | |
parent_id |
integer | No | New parent entry ID. Pass 0 to make top-level. Omit to leave unchanged. | |
task_id |
integer | No | Optional. The lh-tasks task this call is working on. Pass with claim_token: the call is refused unless you hold that claim, and a successful call renews it. |
|
claim_token |
string | No | Optional. The claim_token from claim-next-task for task_id. Required when task_id is given. |
|
site_id |
integer | No | Optional. ID of another site in the network to act on; list-my-sites gives the sites you belong to. Permissions are checked on that site. Omit for this site. |